package cn.aitrox.ry.util;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

public class MapUtils {

    /**
     * 对象转化为 Map
     *
     * @param obj 要转换的对象
     * @return map 转换结果
     * @throws IllegalAccessException 访问权限的异常
     */
    public static Map<String, Object> objectToMap(Object obj) throws IllegalAccessException {
        if (obj == null) {
            return null;
        }
        Map<String, Object> map = new HashMap<>(16);
        Field[] declaredFields = obj.getClass().getDeclaredFields();
        for (Field field : declaredFields) {
            field.setAccessible(true);
            if (null != field.get(obj)) {
                map.put(field.getName(), field.get(obj));
            }
        }
        return map;
    }

    /**
     * Map 转化为对象
     *
     * @param map 要转换的map
     * @param obj 转换为哪个对象
     * @param <T> 返回值类型
     * @return 返回值
     * @throws Exception newInstance可能会抛出的异常
     */
    public static <T> T mapToObj(Map map, Class<T> obj) throws Exception {
        Field[] fields = obj.getDeclaredFields();
        T o = obj.newInstance();
        for (Field field : fields) {
            Object val;
            if ((val = map.get(field.getName())) != null) {
                field.setAccessible(true);
                field.set(o, val);
            }
        }
        return o;
    }

}
